class Calculate{
  /**
   * [computeCount 计算注数]
   * @param  {number} active   [当前选中的号码]
   * @param  {string} play_num [当前的玩法标识]
   * @return {number}          [注数]
   */
  computeCount(active,play_num){
    let count=0;
    //利用set存储 用set里面的has方法判断是否存在这个属性
    const exsit=this.play_list.has(play_num);
    //设置一个数组的长度,然后用0填充
    const arr=new Array(active).fill('0');
    if(exsit && play_num.at(0)==='r'){
      //combine是类的静态方法
      count=Calculate.combine(arr,play_num.split('')[1]).length;
    }
    return count;
  }
/**
 * [computeBonus 奖金]
 * @param  {number} acrive   [当前选中的号码]
 * @param  {string} play_num [当前的玩法标志]
 * @return {array}          [奖金范围]
 */
  computeBonus(acrive,play_num){
    //拿到当前玩法的基数
    const play=play_num.split('');
    const self=this;
    let arr=new Array(play[1]*1).fill(0);
    let min,max;
    if(play[0]==='r'){
      let min_active=5-(11-active);
      if(min_active-play[1]>=0){
        arr=new Array(min_active).fill(0);
        min=Calculate.combine(arr,play[1]).length;
      }else{
        if(play[1]-5>0&&active-play[1]>=0){
          arr=new Array(active-5).fill(0);
          min=Calculate.combine(arr,play[1]-5).length;
        }else{
          min=active-play[1]>-1?1:0
        }
      }
    }else{
      min=active-play[1]>-1?1:0;
    }
    let max_active=Math.min(active,5);
    if(play[1]-5>0){
      if(play[1]-5>0){
        if(active-play[1]>=0){
          arr=new Array(active-5).fill(0);
          max=Calculate.combine(arr,play[1]-5).length;
        }else{
          max=0;
        }
      }else if(play[1]-5<0){
        arr=new Array(Math.min(ative,5)).fill(0);
        max=Calculate.combine(arr,play[1]).length;
      }else{
        max=1;
      }
    }
    //用map方法  的get方法  用箭头函数
    return [min,max].map(item=>item*self.play_list.get(play_num).bonus)
  }
/**
 * [combine 组合运算]
 * @param  {array} arr  [参与组合运算的数据]
 * @param  {number} size [组合运算的基数]
 * @return {number}      [计算注数]
 */
 static combine(arr,size){
   let allResult=[];
   //在 es6 里面用递归的方式，一定要加函数名称 不然会报错
   (function f(arr,size,result){
     let arrLen=arr.length;
     if(size>arrLen){
       return
     }
     if(size===arrLen){
       allResult.push([].concat(result,arr))
     }else{
       for(let i=0;i<arrLen;i++){
         let newResult=[].concat(result);
         newResult.push(arr[i]);
         if(size===1){
           allResult.push(newResult)
         }else{
           let newArr=[].concat(arr);
           newArr.splice(0,i+1);
           f(newArr,size-1,newResult)
         }
       }
     }
   })(arr,size,[])
   return allResult;
 }
}

export default Calculate
